const express = require("express")
const router = express.Router()
const adminDB = require("../../../db/admin.js")
const journalDB = require("../../../db/journal")
const albumDB = require("../../../db/album")
const shareDB = require("../../../db/share")
const fs = require("fs")
const {join} = require("path")

// 发表权限
router.post("/isPublish",async(req,res)=>{
  try {
    let {_id,allowPublish} = req.body
    // 检测该用户是否存在
    let doc = await adminDB.findById(_id)
    if(!doc){
      return res.send({
        code:2,
        mes:"该管理员已被删除，请刷新后重试"
      })
    }
    // 检测是否超管
    if(!req.session.userInfo.Supertube){
      return res.send({
        code:13,
        mes:"您不是超级管理员，没有修改管理员权限"
      })
    }
    // 修改权限
    await adminDB.findByIdAndUpdate(_id,{
      allowPublish
    })
    if(!allowPublish){
      return res.send({
        code:0,
        mes:"已撤回该管理员发表权限"
      })
    }
    res.send({
      code:0,
      mes:"已添加该管理员发表权限"
    })
  } catch (error) {
    res.send({
      code:5,
      mes:"服务器异常，前稍后再试"
    })
  }
})

// 修改权限
router.post("/isUpdate",async(req,res)=>{
  try {
    let {_id,allowUpdate} = req.body
    // 判断该用户是否存在
    let doc = await adminDB.findById(_id)
    if(!doc){
      return res.send({
        code:2,
        mes:"该管理员已被删除，请刷新后重试"
      })
    } 
    // 检测是否超管
    if(!req.session.userInfo.Supertube){
      return res.send({
        code:13,
        mes:"您不是超级管理员，没有修改管理员权限"
      })
    }
    // 修改权限
    await adminDB.findByIdAndUpdate(_id,{allowUpdate})
    if(!allowUpdate){
      return res.send({
        code:0,
        mes:"已撤回该管理员修改权限"
      })
    }
    res.send({
      code:0,
      mes:"已添加该管理员修改权限"
    })
  } catch (error) {
    res.send({
      code:5,
      mes:"服务器异常，前稍后再试"
    })
  }
})

// 删除权限
router.post("/isDelete",async(req,res)=>{
  try {
    let {_id,allowDelete} = req.body
    // 检测该管理员是否存在
    let doc = await adminDB.findById(_id)
    if(!doc){
      return res.send({
        code:2,
        mes:"该管理员已被删除，请刷新后重试"
      })
    }
    // 检测是否为超级管理员
    if(!req.session.userInfo.Supertube){
      return res.send({
        code:13,
        mes:"您不是超级管理员，没有修改管理员权限"
      })
    }
    // 修改权限
    await adminDB.findByIdAndUpdate(_id,{allowDelete})
    if(!allowDelete){
      return res.send({
        code:0,
        mes:"已撤回该管理员删除权限"
      })
    }
    res.send({
      code:0,
      mes:"已添加该管理员删除权限"
    })
  } catch (error) {
    res.send({
      code:5,
      mes:"服务器异常，前稍后再试"
    })
  }
})

// 删除管理员
router.post("/deleteAdmin",async(req,res)=>{
  try {
    // 判断是不是超级管理员
    if(!req.session.userInfo.Supertube){
      return res.send({
        code:13,
        mes:"您不是超级管理员，没有删除管理员权限"
      })
    }
    let {_id} = req.body
    // 判断用户是否存在
    let doc = await adminDB.findById(_id)
    if(!doc){
      return res.send({
        code:2,
        mes:"该管理员已被删除，请刷新后重试"
      })
    }
    // 删除管理员
    await adminDB.findByIdAndRemove(_id)
    // 在文章中查找该管理员发布的所有日志文章，并删除
    let findJournal = await journalDB.find({author:_id})
    findJournal.forEach(item=>{
      // 删除封面图
      item.cover.forEach(del=>{
        fs.rm(join(__dirname,"../../../static"+del),
        {recursive:true},err=>{
          if(err) return
        })
      })
      // 删除md文件
      fs.rm(join(__dirname,"../../../static"+item.md),
      {recursive:true},err=>{
        if(err) return
      })
    })
    // 删除数据库中的内容
    await journalDB.deleteMany({author:_id})
    // 在分享中的查找该管理员发布的所有的分享文章，并删除
    let finfShare = await shareDB.find({author:_id})
    finfShare.forEach(item=>{
      // 删除封面图
      item.cover.forEach(del=>{
        fs.rm(join(__dirname,"../../../static"+del),
        {recursive:true},err=>{
          if(err) return
        })
      })
      // 删除md文件
      fs.rm(join(__dirname,"../../../static"+item.md),
      {recursive:true},err=>{
        if(err) return
      })
    })
    await shareDB.deleteMany({author:_id})
    // 在相册中查找该管理员发布的所有的相册，并删除
    let findAlbum = await albumDB.find({author:_id})
    findAlbum.forEach(item=>{
      // 删除封面图
      fs.rm(join(__dirname,"../../../static"+item.src),
      {recursive:true},err=>{
        if(err) return
      })
    })
    await albumDB.deleteMany({author:_id})
    res.send({
      code:0,
      mes:"该管理员和其发表的所有内容已被删除"
    })  
  } catch (error) {
    res.send({
      code:5,
      mes:"服务器异常，请稍后再试"
    })
  }
})


module.exports = router